package com.binhthuan.catechist.client.dto;

import java.util.Date;

import name.pehl.piriti.client.json.Json;
import name.pehl.piriti.client.json.JsonReader;
import name.pehl.piriti.client.json.JsonWriter;

import com.google.gwt.core.client.GWT;
/**
 * @author Giang Đinh - Thông tin chung về thành viên, tương ứng với bảng
 *         <b>thanh_vien</b> trong cơ sở dữ liệu.
 */
public abstract class Person {

    public interface PersonReader extends JsonReader<Person> {
    }
    public interface PersonWriter extends JsonWriter<Person> {
    }

    public static PersonReader READER = GWT.create(PersonReader.class);
    public static PersonWriter WRITER = GWT.create(PersonWriter.class);

    /**
     * Mã thành viên.
     */
    @Json
    private Integer id;
    
    /**
     * Tên thánh.
     */
    @Json
    private String patronSaint;
    
    /**
     * Họ gọi.
     */
    @Json
    private String lastName;
    
    /**
     * Tên gọi.
     */
    @Json
    private String fisrtName;
    
    /**
     * Họ tên (viết thường và không dấu). 
     */
    @Json
    private String lowercaseName;
    
    /**
     * Giới tính (là nam hay không).
     */
    @Json
    private Boolean male;
    
    /**
     * Hình đại diện.
     */
    @Json
    private String avatar;
    
    /**
     * Ngày sinh.
     */
    @Json
    private Date birthday;
    
    /**
     * Địa chỉ.
     */
    @Json
    private String address;
    
    /**
     * Giáo khu.
     */
    @Json
    private Area area;
    
    /**
     * Điện thoại liên lạc.
     */
    @Json
    private String phone;

    public Person() {
        
    }
    
    /**
     * Lấy mã thành viên.
     * @return Mã thành viên.
     */
    public Integer getId() {
        return id;
    }

    /**
     * Gán mã thành viên.
     * @param id
     *            Mã thành viên.
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Lấy tên thánh.
     * @return Tên thánh.
     */
    public String getPatronSaint() {
        return patronSaint;
    }

    /**
     * Gán tên thánh.
     * @param patronSaint
     *            Tên thánh.
     */
    public void setPatronSaint(String patronSaint) {
        this.patronSaint = patronSaint;
    }

    /**
     * Lấy họ gọi.
     * @return Họ gọi.
     */
    public String getLastName() {
        return lastName;
    }

    /**
     * Gán họ gọi.
     * @param lastName
     *            Họ gọi.
     */
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    /**
     * Lấy tên gọi.
     * @return Tên gọi.
     */
    public String getFisrtName() {
        return fisrtName;
    }

    /**
     * Gán tên gọi.
     * @param fisrtName
     *            Tên gọi.
     */
    public void setFisrtName(String fisrtName) {
        this.fisrtName = fisrtName;
    }

    /**
     * Lấy họ tên (viết thường và không dấu).
     * @return Họ tên (viết thường và không dấu).
     */
    public String getLowercaseName() {
        return lowercaseName;
    }

    /**
     * Gán họ tên (viết thường và không dấu).
     * @param lowercaseName
     *            Họ tên (viết thường và không dấu).
     */
    public void setLowercaseName(String lowercaseName) {
        this.lowercaseName = lowercaseName;
    }

    /**
     * Lấy giới tính (là nam hay không).
     * @return <b>true</b> nếu là nam.
     */
    public Boolean isMale() {
        return male;
    }

    /**
     * Gán giới tính nam.
     * @param male
     *            <b>true</b> nếu là nam.
     */
    public void setMale(Boolean male) {
        this.male = male;
    }

    /**
     * Lấy hình đại diện.
     * @return Hình đại diện.
     */
    public String getAvatar() {
        return avatar;
    }

    /**
     * Gán hình đại diện.
     * @param avartar
     *            Hình đại diện.
     */
    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    /**
     * Lấy ngày sinh nhật.
     * @return Ngày sinh nhật.
     */
    public Date getBirthday() {
        return birthday;
    }

    /**
     * Gán ngày sinh nhật.
     * @param birthday
     *            Ngày sinh nhật.
     */
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    /**
     * Lấy địa chỉ.
     * @return Địa chỉ.
     */
    public String getAddress() {
        return address;
    }

    /**
     * Gán địa chỉ.
     * @param address
     *            Địa chỉ.
     */
    public void setAddress(String address) {
        this.address = address;
    }

    /**
     * Lấy giáo khu.
     * @return Giáo khu.
     */
    public Area getArea() {
        return area;
    }

    /**
     * Gán giáo khu.
     * @param area
     *            Giáo khu.
     */
    public void setArea(Area area) {
        this.area = area;
    }

    /**
     * Lấy điện thoại liên lạc.
     * @return Điện thoại liên lạc.
     */
    public String getPhone() {
        return phone;
    }

    /**
     * Gán điện thoại liên lạc.
     * @param phone
     *            Điện thoại liên lạc.
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }
}
